
// 力扣66. 加一
class Solution {
    public int[] plusOne(int[] digits) {
        boolean flag = false;
        int n = digits.length - 1;
        // 先加1到最后一位
        digits[n] += 1;

        // 处理进位
        for(int i = digits.length - 1; i >= 0; i--) {
            if(flag) {
                digits[i]++;
                flag = false; // 重置标志，因为已经处理了进位
            }

            if(digits[i] == 10) {
                digits[i] = 0;
                flag = true;
            } else {
                // 没有进位，提前退出循环
                break;
            }
        }

        // 只有当还有进位时才需要创建更长的数组
        if(flag) {
            int[] res = new int[digits.length + 1];
            res[0] = 1;
            // 复制原有数字
            for(int i = 0; i < digits.length; i++) {
                res[i + 1] = digits[i];
            }
            return res;
        } else {
            // 没有进位，直接返回原数组
            return digits;
        }
    }
}


// 力扣50. Pow(x, n)
class Solution1 {
    public double myPow(double x, int n) {
        if(n == 0 || x == 1) {
            return 1;
        }
        if(n < 0) {
            return 1/(x*myPow(x, -(n+1)));
        }
        if(n % 2 == 0) {
            return myPow(x*x, n/2);
        }else {
            return x*myPow(x*x, (n-1)/2);
        }
    }
}